Java es un lenguaje de programación orientado a objetos desarrollado por James Gosling en Sun Microsystems a comienzos de los 90
Los programas Java no se compilan a código nativo (código máquina)
El código fuente Java no se interpreta (no es un lenguaje de script)
El código Java se compila a bytecode (un código intermedio menos abstracto que el código fuente pero más abstracto que el código máquina)
El bytecode es único (no depende del hardware ni del sistema operativo)
Nociones sobre el lenguaje de programación Java
El bytecode es ejecutado por la Máquina Virtual Java. Hoy en día, lo más habitual es utilizar compilación JIT (Just-In-Time). El bytecode se compila a código nativo como paso previo a la ejecución
Los programas Java pueden ejecutar en cualquier plataforma sobre la que exista una JVM (Java Vírtual Machine)
Filosofía “Write once, run anywhere”
Por tanto, los programas Java son independientes de la plataforma
JVM (Java Virtual Machine): Software que virtualiza el entorno de ejecución. Es la parte que se ocupa de que una aplicación pueda ejecutar con independencia de la plataforma
JRE (Java Runtime Environment): Paquete de programas que permiten la ejecución de una aplicación Java. Incluye una JVM + una API
Dependiendo de la plataforma hardware, se han definido diferentes familias de APIs
JME (Java Platform Micro Edition: para entornos con recursos limitados
JSE (Java Platform Standard Edition): para ordenadores personales
JEE (Java Platform Enterprise Edition): para aplicaciones de empresa distribuidas
JDK (Java Development Kit): JRE + herramientas necesarias para desarrollar aplicaciones en el lenguaje Java (compiladores, depuradores, etc.)
Netbeans: IDE distribuido por Sun Microsystems para el desarrollo en Java
Eclipse: IDE para el desarrollo en Java distribuido como software libre
Java: Algo de jerga
En Java hay tres tipos de programas: las aplicaciones, los applets y los servlets
Existen otros tipos de programas muy específicos (MIDlets, etc.) pero no los estudiaremos en este curso
Aplicaciones Java (Java stand-alone applications)
El programa se ejecuta como un proceso independiente
El flujo de ejecución debe comenzar siempre en un método estático con nombre main que se encuentre en una clase pública
Java: tipos de programas
public class HolaMundo{
public static void main(String[] args){
System.out.println(“Hola mundo!”);
}
}
Java applets
El programa se ejecuta empotrado en otra aplicación (normalmente un navegador)
Debe existir una clase pública que extienda la clase Applet de la API estándar y redefina el método paint de la misma
El flujo de ejecución comienza en el método paint de la citada clase
El applet se descarga desde una máquina remota y se ejecuta en una máquina virtual local
Java: tipos de programas Cont.
import java.applet.Applet;
import java.awt.Graphics;
public class HelloWorld extends Applet {
public void paint(Graphics gc) {
gc.drawString("Hello, world!", 65, 95);
}
}
Java servlets
El programa se ejecuta empotrado en otra aplicación (normalmente un servidor)
Se debe implementar la interfaz Servlet definida en la API Servlet
El servlet el un objeto que ejecuta en una máquina remota e interactúa con un proceso local mediante un protocolo de petición – respuesta
Java: tipos de programas Cont.
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("text/html");
PrintWriter pw = response.getWriter();
pw.println(“Hello, world!");
pw.close();
}
}
Toda clase pública está definida en un fichero con el mismo nombre que la clase
El compilador (javac) espera el nombre de un fichero como argumento
El intérprete (java) espera el nombre de una clase como argumento
Los ficheros fuente tienen extensión .java, los compilados (bytecode) .class
Java: Hola mundo
# vi HolaMundo.java
public class HolaMundo{
public static void main(String[] args){
System.out.println(“Hola mundo!”);
}
}
# javac HolaMundo.java
# ls
HolaMundo.java HolaMundo.class
# java HolaMundo
Hola mundo!
Las clases y los objetos son los dos conceptos básicos de Java
Lleva algún tiempo comprender como manejarlas correctamente
Un objeto es una entidad que se puede manipular en un programa
Las clase son una definición de qué “cosas” tienen los objetos
Las “cosas” que puede tener un objeto son: atributos y métodos
Los atributos son variables tipadas
Los métodos son secuencias de instrucciones que actúan sobre los atributos
Los objetos son siempre instancias de una clase
Java: Clases y objetos
public class Persona{
private String nombre;
private String apellidos;
public Persona (String nombre, String apellidos){
this.nombre = nombre;
this.apellidos = apellidos;
}
public String getNombreCompleto(){
return nombre + “ “ + apellidos;
}
…
}
Miembro = atributo o método
En Java, los miembros pueden ser de instancia o de clase
Un miembro de instancia está asociado a un objeto concreto de esa clase (cada objeto tiene su propio miembro)
Un miembro de clase está asociado a una clase (todos los objetos que sean instancia de esa clase comparten el mismo miembro)
A un miembro de instancia se accede precediéndolo del identificador de la instancia
A un miembro de clase se accede precediéndolo de un identificador de instancia o bien del nombre de la clase
Los miembros de clase se preceden de la palabra clave static
Java: Miembros estáticos
public class Alumno{
private static numAlumnos = 0;
}
…
Alumno.numAlumnos ++;
Alumno alumno = new Alumno();
System.out.println(“Hay “ + alumno.numAlumnos + “ alumnos”);
En Java hay dos tipos de datos: objetos y tipos primitivos
Los tipos primitivos incluyen: int, float, double, byte, boolean, etc.
Para cada tipo primitivo existe una clase asociada (Integer-int, Float-float, etc.)
Desde Java 1.5 la conversión de tipos primitivos a sus “objetos” equivalentes es automática (mecanismo de autoboxing)
Las variables de tipo primitivo “contienen” su valor
Las variables de tipo “objeto” contienen una referencia al objeto
Por seguridad, hay objetos inmutables (no se pueden cambiar)
Los objetos de la clase String son inmutables
Java: Tipos
Persona p1 = new Persona(“Luis”, “López”);
Persona p2 = p1;
p2.setNombre(“Patata”);
System.out.println(p1.getNombreCompleto); //Imprime “Patata López”
int a = 22;
int b = a;
b = 3;
System.out.println(“a=” + a); //Imprime “a=22”
En Java, las clases pueden extenderse mediante un mecanismo de herencia
class ClaseHija extends ClasePadre{…}
La clase hija “hereda” (posee) los atributos y métodos de la clase padre
La clase hija solo “ve” los atributos y métodos declarados con visibilidad de paquete, públicos o protegidos, pero no “ve” los privados
En Java, todas las clases heredan de la clase Object definida
En Java no se soportan herencia múltiple
Java: Herencia
class Empleado extends Persona {
public Empleado(String nombre, String apellidos){
super(nombre, apellidos);
}
public int sueldo;
}
…
Empleado e = new Empleado(“Pedro”, “González”);
System.out.println(e.getNombreCompleto);//Imprime “Pedro González”
…
En Java, las interfaces proporcionan un conjunto de declaraciones de métodos
Las interfaces no proporcionan implementación, son solo declaración
Las clases pueden “implementar” una interfaz determinada, para ello, deben proporcionar una implementación de todos los métodos declarados en la interfaz
class MiClase implements MiInterfaz{…}
Las interfaces son muy útiles para crear abstracciones y reducir el acoplamiento entre clases
Java: Interfaces
public interface Coin {
public double unitsPerEuro();
}
…
public class Peseta implements Coin{
public double unitsPerEuro(){
return 166.3;
}
…
Peseta peseta = new Peseta();
Coin coin = peseta;
En Java, las excepciones son un mecanismo utilizado para indicar que se ha producido un problema algún tipo de problema durante la ejecución
Las excepciones se “elevan” o “lanzan” ante situaciones de error o conflicto
throw new IOException(“El fichero no se encuentra”);
Una excepción “lanzada” rompe el flujo de ejecución del programa y le hace “saltar” hasta “el llamante” de manera recursiva
Las excepciones pueden manejarse en cualquier punto de la jerarquía de llamadas
Una excepción no manejada va progresando en la jerarquía de llamadas hasta que alcanza el programa principal (método main()) y se detiene el programa en curso
Java: Excepciones
try{
//código que puede elevar una excepción
}catch(TipoDeExcepción e){
//código a ejecutar en caso de excepción
}finally(){
//código que se ejecuta haya o no excepción
}
En Java, existe el paquete como instrumento para organizar grandes proyectos
El espacio de nombres de paquete es jerárquico y compuesto por etiquetas separadas por puntos.
Para declarar que una clase está en un paquete, añadimos al comienzo del fichero
package nombre.de.paquete;
Para poder utilizar las clases (e interfaces) declaradas en un paquete sin necesidad de incluir el nombre completo del paquete, podemos utilizar imports
import java.io.*;
import mi.paquete.MiClase;
Java: Paquetes
package mi.paquete;
import java.io.*;
import java.lang.*; //importado por defecto en todos los ficheros
public class MiClase{
//definición de la clase
}
Estas nociones básicas no son suficientes para “saber programar” en Java
Existen infinidad de libros y de documentación en Internet que pueden ser de ayuda para aprender o profundizar en las tecnologías Java
Libros:
Gay Horstmann, “Big Java”, John Wiley & Sons, 2002 (bueno para empezar)
Bruce Eckel, “Piensa en Java”, Prentice Hall, 2003
Tutoriales y libros en la web:
Java Programming en Wikibooks: http://en.wikibooks.org/wiki/Java_Programming
Thinking in Java 3rd Ed: http://www.mindview.net/Books/TIJ/
Página oficial de Java en Sun Microsystems: http://java.sun.com
Conocer los fundamentos del lenguaje es condición necesaria para poder desarrollar aplicaciones en Java, pero no suficiente … tarde o temprano hay que acudir a la especificación de la API estándar
Java: Hay que saber más.
Página anterior | Volver al principio del trabajo | Página siguiente |